---
title: 概述
sidebar_position: 0
---

## 代码好坏的评判标准
代码质量的评价有很强的主观性，描述代码质量的词汇也有很多，比如可读性、可维护性、灵活、优雅、简洁等，这些词汇是从不同维度去评价代码质量的。它们之间有互相作用，并不是独立的，比如，代码的可读性好、可扩展性好就意味着代码的可维护性好。代码质量的高低是一个综合各种因素得到的结论。并不能通过单一的维度去评价一段代码的好坏。

### 可维护性
落实到编码开发，所谓的“维护”就是修改 bug，修改老的代码、添加新的代码之类的工作。所谓的“代码易维护”就是指，在不破坏原有代码设计、不引入新的 bug 的情况下，能够快速地修改或者添加代码。

### 可读性
代码的可读性是评价代码质量最重要的标准之一，在编写代码时，要时刻考虑代码是否易读、易理解。除此之外，代码的可读性在非常大的程度上会影响代码的可维护性。


### 可扩展性

可扩展性也是一个评价代码质量非常重要的标准。它表明代码应对未来需求变化的能力。跟可读性一一样，代码的是否易扩展也决定代码是否易于维护。

代码的可扩展性表示，我们在不修改或少量修改原有代码的情况下，通过扩展的方式添加新的功能代码。


### 灵活性
如果一段代码易扩展、易复用或者易用，就可以称这段代码写得比较灵活。

### 简洁性
代码简单、逻辑清晰，也就意味着易读、易维护。

### 可复用性
代码的可复用性可以简单地理解为，尽量减少重复代码的编写，复用已有的代码。

### 可测试性
代码可测试性的好坏，能从侧面上非常准确地反应代码质量的好坏。代码的可测试性差，比较难写单元测试，那基本上就能说明代码设置的有问题。

## 如何写出高质量的代码
如何写出高质量的代码，也就等同于，如何写出易维护、易读、易扩展、灵活、简洁、可复用、可测试的代码。

要写出满足这些评价标准的高质量代码，需要掌握一些编程方法论，包括面向对象设计思想、设计原则、设计模式、编程规范、重构技巧等。


<img src="https://wkq-img.oss-cn-chengdu.aliyuncs.com/20241115001846.png"/>


### 面向对象
现在，主流的编程范式或者是编程风格有三种，分别是面向过程、面向对象和函数式编程。面向对象这种编程风格又是这其中最主流的。现在比较流行的编程语言大部分都是面向对象编程语言。大部分项目都是基于面向对象编程风格开发的。<RedSpan>面向对象编程因为其具有丰富的特性（封装、抽象、继承、多态），可以实现很多复杂的设计思路，是很多设计原则、设计模式编码的基础</RedSpan>。

* 面向对象的四大特性：封装、抽象、继承、多态
* 面向对象编程和面向过程编程的区别与联系。
* 面向对象分析、面向对象设计、面向对象编程
* 接口类和抽象类的区别以及各自的应用场景
* 基于接口而非实现编程的设计思想
* 多用组合少用继承的设计思想
* 面向对象的贫血模型和面向对象的充血模型

### 设计原则
<RedSpan>设计原则是指导代码设计的一些经验总结，对于某些场景下，是否应该使用某种设计模式，具有指导意义。比如,"开闭原则" 是很多设计模式（策略、模板等）的指导原则</RedSpan>。
* SOLID 原则：SRP 单一职责原则
* SOLID 原则：OCP 开闭原则
* SOLID 原则：LSP 里氏替换原则
* SOLID 原则: ISP 接口隔离原则
* SOLID 原则： DIP 依赖倒置原则
* DRY 原则、KISS 原则、YAGNI 原则、LOD 原则。

### 设计模式
设计模式是针对软件开发中经常遇到的一些设计问题，总结出来的一套解决方案或者设计思路。<RedSpan>大部分设计模式解决的都是可扩展性问题</RedSpan>。需要学习它们都能解决那些问题，掌握典型的应用场景，并且懂得不过度使用。

经典的设计模式有 23 种，又可以分为三大类：创建型、结构型、行为型。
#### 创建型
常用的有：单例模式、工厂模式（工厂方法模式和抽象工厂）、建造者模式。

不常用的有：原型模式

#### 结构型
常用的有 代理模式、桥接模式、装饰者模式、适配器模式

不常用的有：组合模式、门面模式、享元模式
#### 行为型
常用的有：观察者模式、模板方法、策略模式、职责链模式、迭代器模式、状态模式

不常用的有：访问者模式、备忘录模式、命令模式、中介模式、解释器模式。

### 编程规范
编程规范主要解决的是代码的可读性问题。编码规范相对于设计原则、设计模式，更加具体，更加偏重代码细节。

### 代码重构
在软件开发中，只要软件在不停的迭代，就没有一劳永逸的设计。随着需求的变化、代码的不断堆砌，原有的设计必定会存在这样那样的问题。针对这些问题，就需要进行代码重构。

重构是软件开发中非常重要的一个环节。持续重构是保持代码质量不下降的有效手段，能有效避免代码腐化到无可救药的地图。

重构的工具就是面向对象设计思想、设计原则、设计模式、编码规范。

* 重构的目的（Why）、对象（Who）、时机（When）、方法（How）；
* 保证重构不出错的技术手段：单元测试和可测试性
* 两种不同规模的重构：大重构（大规模高层次）和小重构（小规模低层次）



:::tip
在某个场景下，该不该用这个设计模式，那就看能不能提高代码的可扩展性；要不要重构，那就看代码是否存在可读、可维护性问题等。
:::


